小李是個程式設計師,但他有個夢想 - 開一家餐廳。這個故事要從他的小餐廳說起,因為餐廳的經營演進,竟然完美地反映了軟體系統監控的發展歷程。
2010年,小李在台北巷弄裡開了一家只有10個座位的小麵店。那時候,他一個人身兼老闆、廚師、服務生,每天忙得團團轉,但心裡很踏實 - 因為所有事情都在他的掌控之中。客人點什麼、廚房缺什麼、今天賺了多少錢,他都一清二楚。
這就像早期的單體應用程式。所有功能都在一個系統裡,出了問題很容易找到原因,修復也很直接。那時候的監控很簡單:看看 CPU 使用率、記憶體夠不夠、硬碟有沒有滿,就像小李看看瓦斯夠不夠、食材新不新鮮、收銀機裡有多少錢一樣直觀。
生意越來越好,小李決定擴張。2015年,他在台北開了三家分店:信義店、西門店、還有士林店。每家店都有自己的廚房、服務生、收銀台。
剛開始,小李以為管理三家店就是把原來的模式複製三遍。但很快他就發現,事情沒那麼簡單。
有一天晚上,小李接到信義店店長的電話:「老闆,我們的牛肉麵賣完了,但客人還在排隊。」
「那就跟西門店調貨啊!」小李說。
「可是西門店說他們也快賣完了,而且士林店今天休息,我們不知道明天的食材夠不夠。」
小李這才意識到,當餐廳變成多家分店後,他再也無法像以前那樣一眼看穿所有狀況。每家店的庫存、營業額、客流量都是分散的資訊,他需要一個新的方法來掌握全局。
這就是分散式系統帶來的第一個挑戰:資訊分散。以前所有資料都在一個地方,現在分散在不同的節點上。就像小李需要知道三家店的即時狀況一樣,系統管理員需要監控分散在不同伺服器上的應用程式。
更糟的事情發生在一個週末。士林店的收銀系統突然當機,但奇怪的是,信義店和西門店都正常運作。客人無法結帳,但廚房還在正常出餐,造成了巨大的混亂。
小李趕到士林店,發現問題出在網路連線。原來三家店共用一個中央的會員系統和庫存管理系統,士林店的網路出問題後,無法連接到中央系統,所以收銀機不知道該怎麼處理會員折扣和庫存扣減。
「為什麼其他兩家店沒問題?」小李問技術人員。
「因為網路問題只影響士林店,但中央系統還是正常的。這就是部分故障 - 系統的一部分壞了,但其他部分還在運作。」
這讓小李學到了分散式系統的第二個重要概念:部分故障。在單店時代,要嘛整個店正常,要嘛整個店有問題。但在多店模式下,可能出現一家店有問題,其他店正常的情況,這讓問題診斷變得複雜許多。
還有一次,小李發現帳目對不上。明明三家店的日營業額加起來應該是 15 萬,但中央系統顯示只有 12 萬。
經過調查才發現,原來是時間同步的問題。士林店的收銀機時間慢了 3 小時,所以晚上 9 點的交易被記錄成晚上 6 點,跨日的帳務處理就出錯了。
「時間怎麼會這麼重要?」小李不解。
技術人員解釋:「在分散式系統中,時間同步非常關鍵。如果各個節點的時鐘不一致,就無法正確地排序事件,也無法準確地分析問題發生的順序。」
從那之後,小李要求所有分店的系統都必須定期校時,就像所有伺服器都需要使用 NTP 服務來同步時間一樣。
經歷了這些挫折後,小李決定建立一套完整的監控系統。他聘請了一位有經驗的餐飲管理顧問老王。
老王告訴他:「你需要的不只是知道每家店賺了多少錢,你需要知道為什麼賺這麼多,或為什麼賺這麼少。」
老王教小李建立了三套監控機制:
第一套:數字指標
每家店每小時回報:客流量、營業額、食材消耗量、員工出勤狀況。這就像系統監控中的 metrics - 用數字來量化系統的狀態。
第二套:事件記錄
每當發生特殊事件,比如設備故障、客訴、員工請假,都要詳細記錄時間、原因、處理方式。這就像系統的 logs - 記錄所有重要事件的詳細資訊。
第三套:流程追蹤
追蹤一個客人從進店到離店的完整體驗:排隊多久、點餐多久、出餐多久、用餐多久。這就像分散式追蹤 - 跟蹤一個請求在系統中的完整路徑。
「這三套資訊結合起來,你就能快速找到問題的根源。」老王說,「比如營業額下降(指標異常),你可以查看是否有設備故障(事件記錄),或者是出餐時間變長(流程追蹤)。」
老王還教了小李一個重要概念:「你不可能同時做到所有事情都完美。」
他畫了一個三角形:「一致性、可用性、容錯性,你只能選兩個。」
「什麼意思?」小李問。
「比如說,你想要所有分店的菜單價格都一致(一致性),而且所有分店都要正常營業(可用性)。但如果總部的系統壞了,分店就收不到最新的價格更新。這時候你有兩個選擇:要嘛停止營業等系統修好(犧牲可用性),要嘛繼續用舊價格營業(犧牲一致性)。」
小李恍然大悟:「所以我們選擇繼續營業,用舊價格,等系統修好再統一調整。」
「沒錯,這就是在分散式系統中做選擇。沒有完美的解決方案,只有最適合的權衡。」
小李永遠記得 2016 年的母親節。那天是他開店以來最忙的一天,三家店同時爆滿,訂位電話響個不停。
早上 11 點,災難開始了。
先是信義店的廚師打電話:「老闆,我們的牛肉湯底用完了,但中央廚房說還要一小時才能送到。」
接著西門店也來電:「收銀系統很慢,客人結帳要等很久,開始有人抱怨了。」
然後士林店:「我們的冷氣壞了,客人都在流汗,有人要求退費。」
以前的小李可能會慌張地到處救火,但現在他冷靜地打開監控儀表板。
螢幕上清楚顯示:
更重要的是,系統還顯示了關聯分析:收銀系統變慢是因為母親節促銷活動導致會員查詢量暴增,資料庫負載過高。
小李立刻做出決策:
結果,危機在 30 分鐘內化解,三家店都順利度過了母親節高峰。
「這就是分散式監控的威力,」老王後來總結,「你不只看到問題,還能看到問題之間的關聯,做出最有效的決策。」
# 分層監控策略
monitoring_layers:
infrastructure:
- cpu_usage: "基礎設施層"
- memory_usage: "硬體資源"
- network_io: "網路狀況"
- disk_io: "儲存效能"
platform:
- service_discovery: "服務註冊狀態"
- load_balancer: "負載均衡器狀態"
- message_queue: "訊息佇列深度"
- database_pool: "連接池使用率"
application:
- business_metrics: "業務指標"
- user_experience: "用戶體驗"
- error_rates: "錯誤率"
- response_times: "回應時間"
// 分散式系統時間同步的重要性
type DistributedEvent struct {
NodeID string
Timestamp time.Time
Event string
}
func AnalyzeDistributedEvents(events []DistributedEvent) {
// 問題:不同節點的時鐘可能不同步
// 解決方案:使用 NTP 同步 + 邏輯時鐘
for _, event := range events {
// 調整時間偏移
adjustedTime := adjustForClockSkew(event.Timestamp, event.NodeID)
// 使用邏輯時鐘排序事件
logicalClock := getLogicalClock(event.NodeID)
fmt.Printf("Node: %s, Time: %v, Logical: %d, Event: %s\n",
event.NodeID, adjustedTime, logicalClock, event.Event)
}
}
2018年,小李的餐廳事業蒸蒸日上。他不再滿足於只有三家分店,決定大舉擴張,在全台開設 30 家分店。但這次,他採用了一個全新的經營模式。
以前,每家分店都是一個完整的餐廳 - 有廚房、服務生、收銀台、清潔人員。現在,小李決定把這些功能拆分開來:
每家分店變得很精簡,主要就是接單、簡單加工、出餐。這就像微服務架構 - 把原本一個大系統拆分成許多小的、專門的服務。
有一天,小李想了解一個客人點一碗牛肉麵的完整流程,結果發現比他想像的複雜太多:
「天啊,一碗麵要經過這麼多步驟?」小李驚訝地說。
老王笑了:「這就是微服務的特色。每個服務都很專精,但要完成一個完整的業務流程,需要很多服務協作。好處是每個服務可以獨立升級、獨立擴展,但壞處是...」
「壞處是什麼?」
「任何一個環節出問題,整個流程就可能卡住。」
老王的話很快就得到了驗證。
那是一個平常的週二下午,小李正在辦公室處理文件,突然接到客服中心的電話:「老闆,很多客人反映無法完成點餐,系統一直顯示『處理中』。」
小李立刻查看監控系統,發現一個奇怪的現象:
「支付服務怎麼了?」小李問技術主管小陳。
小陳查了一下:「支付服務本身沒問題,但它依賴的銀行 API 回應很慢。」
「那為什麼會影響到整個點餐流程?」
「因為訂單服務要等支付確認才能完成,支付服務要等銀行回應才能確認。現在銀行 API 慢了,整個鏈條都卡住了。」
這就是微服務架構中的「級聯故障」。一個看似不重要的服務出問題,可能導致整個系統癱瘓。就像交通堵塞一樣,一個路口塞車,可能影響整個城市的交通。
為了解決這類問題,小李和小陳開發了一套「服務地圖」系統。這個系統可以即時顯示所有服務之間的依賴關係,就像一張複雜的地鐵路線圖。
當某個服務出問題時,系統會自動標示出可能受影響的其他服務,並且用不同顏色顯示影響程度:
「這樣我們就能快速找到問題的根源,」小陳解釋,「而且可以預測哪些服務可能會受到影響。」
有了這套系統,小李團隊處理問題的速度大幅提升。以前可能要花一小時才能找到問題根源,現在通常 5 分鐘就能定位。
小李想要更深入了解問題,所以他們開發了一個「訂單追蹤」功能。每個訂單都有一個獨特的編號,系統會記錄這個訂單在各個服務中的處理時間。
有一天,一位客人抱怨點餐花了 5 分鐘才完成,小李決定追蹤這個訂單的完整路徑:
訂單編號:20240315-001234
「原來問題出在銀行 API,」小李恍然大悟,「客人等了 3 分鐘,其實有 2 分 55 秒都在等銀行回應。」
這種追蹤方式讓小李能夠精確定位問題,而不是盲目地猜測。就像醫生用 X 光片看到骨折的確切位置,而不是只知道「腿痛」一樣。
老王教了小李一個重要概念:「不管你有多少個服務,每個服務都要關注四個關鍵指標。」
「哪四個?」
「延遲、流量、錯誤、飽和度。」老王在白板上畫了四個圓圈。
「延遲就是回應時間,客人點餐到確認需要多久?流量就是處理量,一小時能處理多少訂單?錯誤就是失敗率,有多少比例的訂單失敗?飽和度就是資源使用率,系統負載有多重?」
「這四個指標就像人的體溫、血壓、心跳、呼吸,」老王繼續說,「只要這四個指標正常,服務基本上就是健康的。如果有異常,你就知道該往哪個方向調查。」
小李把這四個指標應用到每個服務上,建立了一套標準化的監控體系。不管是支付服務、庫存服務還是通知服務,都用同樣的標準來衡量健康狀況。
# Istio 服務網格監控配置
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: control-plane
spec:
values:
telemetry:
v2:
prometheus:
configOverride:
metric_relabeling_configs:
- source_labels: [__name__]
regex: 'istio_request_duration_milliseconds'
target_label: __name__
replacement: 'http_request_duration_ms'
# 自動注入 sidecar 進行監控
sidecarInjectorWebhook:
enableNamespacesByDefault: true
components:
pilot:
k8s:
resources:
requests:
memory: "128Mi"
cpu: "10m"
// Google SRE 提出的四個黃金指標
type GoldenSignals struct {
Latency float64 // 延遲:請求處理時間
Traffic float64 // 流量:每秒請求數
Errors float64 // 錯誤:錯誤率
Saturation float64 // 飽和度:資源使用率
}
// 為每個微服務收集黃金指標
func MonitorMicroservice(serviceName string) GoldenSignals {
return GoldenSignals{
Latency: calculateP95Latency(serviceName),
Traffic: calculateRPS(serviceName),
Errors: calculateErrorRate(serviceName),
Saturation: calculateResourceUsage(serviceName),
}
}
// 實際應用範例
services := []string{"auth", "order", "payment", "inventory"}
for _, service := range services {
signals := MonitorMicroservice(service)
// 設置告警閾值
if signals.Latency > 1000 { // P95 > 1s
alert(fmt.Sprintf("%s service latency too high: %.2fms", service, signals.Latency))
}
if signals.Errors > 0.01 { // 錯誤率 > 1%
alert(fmt.Sprintf("%s service error rate too high: %.2f%%", service, signals.Errors*100))
}
}
# RED 指標監控實現
class REDMetrics:
def __init__(self, service_name):
self.service_name = service_name
self.prometheus = PrometheusClient()
def get_rate(self, time_window="5m"):
"""請求速率 - Rate"""
query = f'rate(http_requests_total{{service="{self.service_name}"}}[{time_window}])'
return self.prometheus.query(query)
def get_errors(self, time_window="5m"):
"""錯誤率 - Errors"""
error_query = f'rate(http_requests_total{{service="{self.service_name}",status=~"5.."}}}[{time_window}])'
total_query = f'rate(http_requests_total{{service="{self.service_name}"}}[{time_window}])'
errors = self.prometheus.query(error_query)
total = self.prometheus.query(total_query)
return errors / total if total > 0 else 0
def get_duration(self, percentile=95):
"""回應時間 - Duration"""
query = f'histogram_quantile(0.{percentile}, rate(http_request_duration_seconds_bucket{{service="{self.service_name}"}}[5m]))'
return self.prometheus.query(query)
# 使用範例
payment_service = REDMetrics("payment-service")
print(f"Payment Service RED Metrics:")
print(f"Rate: {payment_service.get_rate()} RPS")
print(f"Errors: {payment_service.get_errors()*100:.2f}%")
print(f"Duration P95: {payment_service.get_duration(95)*1000:.2f}ms")
2020年,小李的餐廳帝國已經有 50 家分店,但他發現自己和團隊每天都在「救火」。今天這家店的收銀機壞了,明天那家店的冷氣不冷,後天又有分店的網路斷線。
「我們不能再這樣下去了,」小李對老王說,「我們需要從被動應對變成主動預防。」
老王推薦了一位朋友小張,她曾經在 Google 工作,專門負責系統可靠性工程(SRE)。
小張來到公司的第一天,就問了一個讓小李印象深刻的問題:「你們的服務水準協議是什麼?」
「什麼是服務水準協議?」小李困惑地問。
「就是你們承諾給客人什麼樣的服務品質。比如,你們保證客人點餐後多久能拿到餐點?你們保證一個月內會有幾次系統故障?」
小李從來沒想過這個問題。以前他只是盡力做好,但從來沒有量化過「好」的標準。
小張教了小李一個革命性的概念:「錯誤預算」。
「什麼意思?」小李問。
「假設你們承諾 99.9% 的時間系統都能正常運作,那麼一個月就有 0.1% 的時間可以出錯,這就是你們的錯誤預算。」
小張在白板上算給小李看:「一個月有 43,200 分鐘,0.1% 就是 43.2 分鐘。也就是說,你們一個月可以『故障』43 分鐘,這是可以接受的。」
「那如果我們用完了這 43 分鐘呢?」
「那就暫停所有新功能的開發,專心修復系統,直到系統穩定為止。」
這個概念讓小李大開眼界。以前他總是追求 100% 完美,但小張告訴他,追求 100% 完美的成本是無限大的,而且客人也不需要 100% 完美。
「99.9% 的可靠性對餐廳來說已經足夠了,」小張說,「重要的是要量化這個目標,並且持續監控是否達成。」
小張帶來的最大改變是思維模式的轉換。
以前,小李的團隊是這樣工作的:
現在,小張教他們這樣工作:
「我們要從救火隊變成預防專家,」小張說。
舉個例子,以前收銀系統當機,他們才知道有問題。現在,他們監控收銀系統的回應時間,當回應時間從平常的 1 秒增加到 3 秒時,就會收到警告。這時候系統還沒當機,客人也還沒抱怨,但他們已經開始調查和處理了。
小張還帶來了另一個重要概念:自動化。
「人會犯錯,電腦不會,」她說,「所以能自動化的事情就不要讓人來做。」
她幫小李建立了很多自動化機制:
自動重啟:當某個服務回應時間超過 10 秒,系統會自動重啟該服務。
自動擴容:當某家分店的訂單量超過平常的 150%,系統會自動增加廚房人力配置。
自動告警:當任何指標異常,系統會自動發送通知給相關負責人。
自動修復:當發現常見問題(比如磁碟空間不足),系統會自動清理暫存檔案。
「但是,」小張強調,「自動化不是萬能的。重要的決策還是需要人來做。自動化只是幫我們處理那些重複性、低風險的工作。」
小張還引入了一個聽起來很可怕的概念:「混沌工程」。
「我們要故意製造一些小問題,看看系統能不能自己恢復,」她說。
「什麼?故意製造問題?」小李嚇了一跳。
「對,比如我們故意讓某家分店的網路斷線 5 分鐘,看看其他分店是否受影響,看看系統是否能自動切換到備用方案。」
「這不是很危險嗎?」
「在可控的範圍內製造小問題,總比在不可控的情況下遇到大問題要好。」小張解釋,「就像疫苗一樣,注射少量的病毒讓身體產生抗體,這樣真正遇到病毒時就不會生病。」
經過幾次混沌實驗,小李發現了很多平時沒注意到的問題,也讓系統變得更加穩定。
小張還建立了一個重要的文化:「無責備的事後檢討」。
每當發生重大問題,團隊會召開檢討會議,但重點不是追究誰的責任,而是分析問題的根本原因,並且制定預防措施。
「人都會犯錯,」小張說,「重要的是從錯誤中學習,讓同樣的錯誤不再發生。如果我們一味地責備,大家就會隱瞞問題,這樣我們就學不到任何東西。」
這種文化讓團隊更願意主動報告問題,也讓系統持續改進。
🎯 SRE 團隊的日常工作
On-call 輪值 (25%):
├── 監控告警回應
├── 事故處理和根因分析
├── 緊急修復和回滾
└── 事故後檢討 (Post-mortem)
系統改進 (50%):
├── 監控系統優化
├── 自動化工具開發
├── 可靠性工程項目
└── 效能調優和容量規劃
協作支援 (25%):
├── 協助開發團隊設計可靠系統
├── 代碼審查 (關注可靠性)
├── 培訓和知識分享
└── 監控最佳實踐推廣
2022年,小李的餐廳事業已經擴展到全亞洲,有超過 200 家分店。傳統的 IT 基礎設施已經無法支撐這樣的規模,維護成本也越來越高。
這時候,小張建議他們遷移到雲端,特別是使用 AWS 的 EKS(Elastic Kubernetes Service)。
「為什麼是 EKS?」小李問。
「因為它完美地解決了我們之前遇到的所有問題,」小張說,「還記得我們從單店到多店,再到微服務架構的演進嗎?EKS 就是為這種複雜的微服務架構而生的。」
小張在白板上畫了一個圖:「EKS 就像一個超級智能的城市管理系統,它不只管理我們的服務,還提供了完整的監控、自動化、和故障恢復能力。」
小張解釋 EKS 如何實現他們需要的三層監控:
第一層:基礎設施監控
「就像監控每家分店的水電、空調、網路一樣,EKS 會自動監控所有伺服器的 CPU、記憶體、磁碟、網路狀況。而且這些都是自動的,我們不需要手動設置。」
第二層:平台監控
「EKS 會監控 Kubernetes 集群的健康狀況,包括節點是否正常、Pod 是否運行、服務是否可達。這就像監控我們的配送系統、通訊系統是否正常一樣。」
第三層:應用監控
「我們可以監控每個微服務的效能,追蹤客人訂單的完整路徑,分析業務指標。這就像我們之前做的服務監控,但更加智能和自動化。」
小張特別興奮地介紹 Container Insights:「這就像給我們的整個系統裝上了 X 光機,可以看到每個容器、每個服務的內部狀況。」
她展示了一個儀表板:「你看,這裡顯示了所有分店系統的即時狀況。綠色表示正常,黃色表示需要注意,紅色表示有問題。而且它會自動收集所有的指標,我們不需要手動配置。」
小李看著螢幕上密密麻麻的圖表和數字,感到既興奮又有點眼花撩亂:「這些數據這麼多,我們怎麼知道該關注什麼?」
「這就是 Container Insights 的聰明之處,」小張說,「它會自動幫我們篩選重要的資訊,並且用視覺化的方式呈現。比如這個熱力圖,顏色越深表示負載越重,我們一眼就能看出哪些服務需要關注。」
「還記得我們之前追蹤一碗牛肉麵的完整流程嗎?」小張問,「X-Ray 就是專門做這件事的工具,而且比我們之前的系統強大太多。」
她打開另一個畫面,顯示了一個複雜的流程圖:「這是一個客人下訂單的完整路徑。你看,從客人點擊『確認訂單』開始,請求經過了 15 個不同的服務,X-Ray 記錄了每個步驟的時間。」
小李仔細看著圖表:「這個支付服務怎麼花了 3 秒?其他服務都只要幾十毫秒。」
「沒錯!X-Ray 幫我們找到了瓶頸。我們可以點進去看詳細資訊。」小張點擊支付服務的節點,「原來是銀行 API 回應慢,我們可以考慮增加重試機制或者切換到更快的支付通道。」
「這太神奇了,」小李感嘆,「以前我們要花好幾個小時才能找到的問題,現在幾分鐘就能定位。」
小張繼續介紹:「除了 AWS 原生的監控工具,EKS 還完美支援開源的監控工具,比如 Prometheus 和 Grafana。」
「這兩個工具有什麼特別的?」小李問。
「Prometheus 就像一個超級勤奮的資料收集員,它會定期去每個服務那裡收集指標資料。Grafana 則是一個藝術家,它把這些枯燥的數字變成美麗的圖表和儀表板。」
小張展示了一個 Grafana 儀表板:「你看,這個儀表板顯示了我們所有服務的健康狀況。這些圖表不只是好看,更重要的是它們能幫我們快速理解系統的狀態。」
儀表板上有各種圖表:
「而且最棒的是,」小張說,「我們可以設置告警規則。當任何指標異常時,系統會自動通知我們,甚至可以自動執行一些修復動作。」
小李最感興趣的是 EKS 的自動化能力。
「還記得我們之前手動擴容的痛苦嗎?」小張問,「在 EKS 中,這些都是自動的。」
她解釋了幾個自動化功能:
自動擴展:當訂單量增加時,系統會自動增加更多的服務實例來處理負載。當負載降低時,又會自動減少實例來節省成本。
自動修復:當某個服務實例出問題時,EKS 會自動重啟或替換它,整個過程不需要人工介入。
自動更新:當有新版本的服務要部署時,EKS 可以自動進行滾動更新,確保服務不中斷。
自動備份:重要的資料會自動備份到多個地點,確保資料安全。
「這就像有一個超級智能的管家,」小李說,「它知道什麼時候該做什麼事,而且從不出錯。」
「沒錯,」小張笑著說,「而且這個管家還會學習。它會分析歷史資料,預測未來的需求,提前做好準備。」
2024年,小李站在他位於台北 101 的辦公室裡,俯瞰著這座城市。他的餐廳事業已經遍布全球 30 個國家,擁有超過 1000 家分店。
回想起 2010 年那個只有 10 個座位的小麵店,小李感慨萬千。那時候的他,絕對想不到監控系統會變得如此重要,也想不到技術會如此深刻地改變他的事業。
「還記得你第一次跟我說要建立監控系統時,我覺得那只是浪費錢,」小李對老王說,「現在我才明白,監控不只是技術工具,更是經營哲學。」
老王笑了:「是啊,從單店到分店,從分店到微服務,從微服務到 EKS,每一步都是必然的演進。技術在變,但核心原則沒變 - 我們需要了解我們的系統,才能管理好我們的系統。」
小張也加入了對話:「其實監控的本質很簡單,就是『知道發生了什麼』。但隨著系統變得越來越複雜,『知道』這件事也變得越來越困難。」
她指著窗外的城市:「你看這座城市,有交通監控、電力監控、水務監控、通訊監控。每個系統都有自己的監控,但更重要的是,這些監控系統之間要能協調合作,才能讓整座城市正常運作。」
「我們的 EKS 監控系統也是一樣,」小張繼續說,「Container Insights 監控基礎設施,X-Ray 追蹤請求流程,Prometheus 收集自定義指標,Grafana 提供視覺化介面。每個工具都有自己的專長,但結合起來就能提供完整的可觀測性。」
這個故事告訴我們,監控系統的演進不是突然發生的,而是隨著業務需求的變化而自然演進的。從小李的單店到全球連鎖,從簡單的人工管理到複雜的 EKS 監控系統,每一步都有其必然性。
重要的不是技術本身,而是技術背後的思維方式:
AWS EKS 提供了一個完整的平台,讓我們能夠實現這些理念。但工具只是工具,真正重要的是我們如何使用這些工具來解決實際問題,如何建立一個持續改進的文化。